670. Maximum Swap

Given a non-negative integer, you could swap two digits at most once to get the maximum valued number. Return the maximum valued number you could get.

Example 1: Input: 2736 Output: 7236 Explanation: Swap the number 2 and the number 7.

Example 2: Input: 9973 Output: 9973 Explanation: No swap.

Note: The given number is in the range [0, 108]

/*
Intuition:
   遍历数组,找出A[i]后的最大值max_num,以及max_num最后出现的下标index,if(max_num > A[i] && A[i] != max_num),
   那么就交换两者,并退出循环,否则继续遍历数组。
*/

public int maximumSwap(int num) {
    char[] A = Integer.toString(num).toCharArray();
     int index=0;
     char max_num ='0',value;
     for (int i = 0; i < A.length-1; i++) { //i<A.length-1
         //找出A[i]后面的最大值
         for (int j = i+1; j < A.length; j++)
             max_num = (char) Math.max(max_num, A[j]);
         //找出最大值下标      
         for (int j2 = i+1; j2 < A.length; j2++)
             if(A[j2] == max_num)
                 index = j2;
         //上面的最大值和下标都已经找到,现在只需比较替换
         if(max_num > A[i] && A[i] != max_num ) {
             value = A[i];
             A[i] = max_num;
             A[index] = value;
             break;
         }
         max_num ='0';
    }

    return Integer.valueOf(new String(A));
}